class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 计算成功举办活动需要多少名主持人
     * @param n int整型 有n个活动
     * @param startEnd int整型vector<vector<>> startEnd[i][0]用于表示第i个活动的开始时间，startEnd[i][1]表示第i个活动的结束时间
     * @return int整型
     */
    int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {
        sort(startEnd.begin(), startEnd.end());
        priority_queue<int, vector<int>, greater<int>> res; // 存储每个主持人的结束时间
        res.push(INT_MIN);  // 法二，用堆优化，注意一开始push  INT_MIN！！！！！！不能是0
        for(int i = 0; i < n; ++i)
        {
            if(res.top() <= startEnd[i][0])
            {
                res.pop();
                res.push(startEnd[i][1]);
            }
            else
            {
                res.push(startEnd[i][1]);
            }
        }
        return res.size();
    }
};
 
/*
    int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {
        sort(startEnd.begin(), startEnd.end());
        vector<int> res; // 存储每个主持人的结束时间
        res.push_back(INT_MIN); // 法一，注意一开始push_back  INT_MIN，不能是0
        for(int i = 0; i < n; ++i)
        {
            // if(startEnd[i][0] < startEnd[i - 1][i])
                // ++res;
            bool flag = false;
            for(auto& e : res) // 找一个主持人去主持
            {
                if(e <= startEnd[i][0])
                {
                    e = startEnd[i][1];
                    flag = true;
                    break;
                }
            }
            if(flag == false)
            {
                res.push_back(startEnd[i][1]);
            }
        }
        return res.size();
    }
};
*/